package br.com.revenda.dao;

import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.revenda.conexao.conectionFactory;
import br.com.revenda.modelo.Usuario;

public class UsuarioDAO {
	
	Connection con;
	
	public UsuarioDAO(){
		this.con = new conectionFactory().getConnection(); 
	}
	
	
	public void salvar(Usuario u ){
		String sql = "insert into usuario (idFuncionario , login , senha , status , autorizado )values(? , ? ,? , ?, ? )";
		try {
			PreparedStatement pstm = con.prepareStatement(sql);
			pstm.setInt(1,u.getIdFuncionario());
			pstm.setString(2, u.getLogin());
			pstm.setString(3, u.getSenha());
			pstm.setInt(4, u.getStatus());
			pstm.setInt(5, u.getAutorizado());
			pstm.execute();
			pstm.close();
			con.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public List<Usuario> listaTodos(){
		List<Usuario> usr = new ArrayList<Usuario>();
		
	String sql = "Select * FROM usuario INNER JOIN funcionario ON funcionario.idFuncionario = usuario.idFuncionario INNER JOIN cargo ON cargo.idCargo = funcionario.idCargo";
	PreparedStatement pstm;
	try {
		pstm = con.prepareStatement(sql);
		ResultSet rs = pstm.executeQuery();
		
		
		while(rs.next()){
			Usuario u = new Usuario();
			u.setIdFuncionario(rs.getInt("idFuncionario"));
			u.setLogin(rs.getString("login"));
			u.setSenha(rs.getString("senha"));
			u.setStatus(rs.getInt("status"));
			u.setAutorizado(rs.getInt("autorizado"));
			u.setIdUsuario(rs.getInt("idUsuario"));
			u.getFuncionario().setNome(rs.getString("nomeFuncionario"));
			u.getFuncionario().getCargo().setNome(rs.getString("nomeCargo"));
			usr.add(u);			
		}		
		rs.close();
		pstm.close();
		con.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
	return usr;
	
	}
	
	
	
	public Integer IDuser(String user ){
	Integer id = null;			
	String sql = "Select * FROM usuario  WHERE login=?  ";
	PreparedStatement pstm;
	try {
		pstm = con.prepareStatement(sql);
		pstm.setString(1, user);
		ResultSet rs = pstm.executeQuery();
				
		while(rs.next()){
			Usuario u = new Usuario();
			u.getFuncionario().setIdFuncionario(rs.getInt("idFuncionario"));
			id = u.getFuncionario().getIdFuncionario();
			
		}		
		rs.close();
		pstm.close();
		con.close();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
	return id;
	
	}
	
	
	
	public void alterar(Usuario u){
		String sql = "update usuario set  login=? , senha=? , status=? , autorizado=? where idUsuario=? ";
		try {
			PreparedStatement pstm = con.prepareStatement(sql);
			System.out.println("id do usuario:"+u.getIdUsuario());
			
			pstm.setString(1, u.getLogin());
			pstm.setString(2, u.getSenha());
			pstm.setInt(3, u.getStatus());
			pstm.setInt(4, u.getAutorizado());
			pstm.setInt(5, u.getIdUsuario());
			pstm.execute();
			pstm.close();
			con.close();
			System.out.println("Alterou");
		} catch (SQLException e) {
			System.out.println("Deu erro");
			e.printStackTrace();
		
		}		
	}	
	
	
	public void deletar(Usuario u){
		String sql = "delete from usuario where idUsuario=?";
		try {
			PreparedStatement pstm  = con.prepareStatement(sql);
			pstm.setInt(1, u.getIdUsuario());
			pstm.execute();
			pstm.close();
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	
	
	
	
}
